package com.itheima.springbootwebtlias.aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

//1.定义类，定义方法，抽取公共的代码
@Component //交给spring管理
@Aspect //告知spring框架，前类是一个抽取公共代码的类
public class RecordTimeAspect {

    //2.定义方法：抽取公共的代码
    @Around("execution(* com.itheima.springbootwebtlias.service.Impl.*.*(..))")//3.定位需要耗时统计的目标方法
    public Object recordTime(ProceedingJoinPoint pjp  /*代码目标方法*/) throws Throwable {
        //公共代码：获取当前起始时间
        LocalDateTime startTime = LocalDateTime.now();

        //调用目标方法：
        Object result = pjp.proceed(); //执行目标方法

        //公共代码：获取当前结束时间
        LocalDateTime endTime = LocalDateTime.now();

        //公共代码：统计耗时
        String methodName = pjp.getSignature().getName();
        System.out.println("AOP统计"+methodName+"耗时："+(endTime.getNano()-startTime.getNano()));

        return result;  //原样返回目标方法的执行结果
    }
}


